package string;

/**
 * java.lang.StringBuilder是修改字符串内容的工具类
 * 内部维护一个可变的char数组，因此开消小，性能好。
 *
 * StringBuilder提供了用于编辑字符串内容的相关操作:
 * 增:append()
 * 删:delete()
 * 改:replace()
 * 插:insert()
 */
public class StringBuilderDemo {
    public static void main(String[] args) {
        String line = "好好学习java";
        StringBuilder builder = new StringBuilder(line);
        /*
            append():将给定内容追加到字符串末尾
         */
        builder.append(",为了找个好工作");
        System.out.println(builder);
        /*
            StringBuilder不是字符串，因此修改后希望得到该字符串时可以调用
            toString方法
         */
        String str = builder.toString();
        System.out.println(str);

        /*
            好好学习java,为了找个好工作
                        V
            好好学习java,就是为了改变世界

            replace(int start,int end,String str)
            将当前字符串部分内容(下标start到end之间，含头不含尾)替换为指定内容
         */
        builder.replace(9,16,"就是为了改变世界");
        System.out.println(builder);

        /*
            好好学习java,就是为了改变世界
                        V
            ,就是为了改变世界

            delete(int start,int end):将指定范围内的字符串删除(下标含头不含尾)
         */
        builder.delete(0,8);
        System.out.println(builder);

        /*
            ,就是为了改变世界
                V
            活着,就是为了改变世界
            insert(int index,String str):将给定内容插入到指定位置
         */
        builder.insert(0,"活着");
        System.out.println(builder);
        /*
            反转字符串
         */
        builder.reverse();
        System.out.println(builder);

        /*
            上述操作的方法返回值都相同，类型为StringBuilder，就是将当前StringBuilder
            自身作为返回值返回。
            目的:可以方便连续调用进行相关的修改操作
         */
//        StringBuilder builder2 = new StringBuilder(line);
        StringBuffer builder2 = new StringBuffer(line);
        String str2 = builder2.append(",为了找个好工作")
                              .replace(9,16,"就是为了改变世界")
                              .delete(0,8)
                              .insert(0,"活着")
                              .reverse().toString();
        System.out.println(str2);

    }
}


